package cn.gok;

import cn.gok.entity.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
    当前整个项目的主启动类
        注：  1、主启动类一定要位于当前项目所有类的最外层
             2、需要在主启动类上添加 @SpringBootApplication 注解

    @SpringBootApplication注解包含注解如下：
            @SpringBootConfiguration： 就是一个配置类注解@Configuration，所以当前主程序类就具备类配置类的功能

            @EnableAutoConfiguration：
                    @AutoConfigurationPackage： 会计算出当前主程序类所在的包路径，
                                                然后Spring Boot会以此为基础路径
                                                去做组件扫描的动作。
                                                所以我们的主程序类，应当放在所有类的最外面

                    @Import({AutoConfigurationImportSelector.class})
                            Spring Boot一启动，就会去读取 spring-boot-autoconfigure jar包下的 AutoConfiguration.imports文件
                            在该文件，书写的是 144个全类名信息，
                            这些类都是自动配置类，分别对应了不同场景的Spring集成配置，
                                比如spring webmvc配置、spring sataSource 配置、spring aop配置

                            但是我们的程序应该是按需加载的，
                                不是说一下把所有的配置都配过来，
                                假如我们当前程序主要 spring webmvc配置，那spring data、spring mq等等这些配置就不该有
                            那Spring Boot 如何知道该加载哪些配置，不该加载哪些配置？
                                依据来源：启动器，
                            我们在依赖中添加了哪些场景启动器，表示我们需要使用它们，
                            那Spring Boot就把与之相关配置类加载，进行配置操作
 */
@SpringBootApplication
public class SpringBootDemo01Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemo01Application.class,args);
    }

    @Bean
    public User user(){
        User user = new User("zhangsan", 19);
        return user;
    }
}
